# charset.rb
# Copyright (C) 2009 Akira TAGOH

# Authors:
#   Akira TAGOH  <akira@tagoh.org>

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.

# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.

require 'iconv'
require 'prune/cihash'
require 'prune/error'


module PRUNE

=begin rdoc

== PRUNE::Charset

=end

  class Charset < PRUNE::CiHash

=begin rdoc

=== PRUNE::Charset#default=(val)

=end

    def default=(val)
      validate_encoding(val)
      super
    end # def default=

=begin rdoc

=== PRUNE::Charset#[]=(key, val)

=end

    def []=(key, val)
      validate_encoding(val)
      super
    end # def []=

    private

    def validate_encoding(value)
      begin
        Iconv.conv(value, value, "foo")
      rescue Errno::EINVAL, Iconv::InvalidEncoding
        PRUNE.Fail(PRUNE::Error::InvalidCharset, value)
      end
    end # def validate_encoding

  end # class Charset

end # module PRUNE
